package com.aleyn.router.data

import com.aleyn.router.core.LRouterInitializer

/**
 * @author : Aleyn
 * @date : 2023/07/29 : 23:11
 *
 * 初始化器数据类，用于存储和比较初始化器的信息。
 *
 * @param priority 优先级，值越小，优先级越高。
 * @param async 是否异步执行。
 * @param routerInitializer 初始化器实例。
 */
internal class InitializerData(
    private val priority: Byte,
    val async: Boolean,
    val routerInitializer: LRouterInitializer
) : Comparable<InitializerData> {

    /**
     * 比较两个 InitializerData 对象。
     * 比较规则：
     * 1. 如果是同一个初始化器实例，则认为相等 (返回 0)。
     * 2. 否则，比较优先级。注意这里的逻辑是 `other.priority >= this.priority` 返回 1，
     *    这意味着优先级数值较小的（即优先级更高）会排在前面（TreeSet 是升序排列）。
     */
    override fun compareTo(other: InitializerData): Int {
        return when {
            other.routerInitializer == this.routerInitializer -> 0
            other.priority >= this.priority -> 1 // 优先级高的排前面
            else -> -1
        }
    }

    override fun toString(): String {
        return """
            priority=${priority},async=${async}
        """.trimIndent()
    }
}